草庐IT

c++ - Clang、std::next、libstdc++ 和 constexpr-ness

全部标签

c++ - 将跨字节数组内容提取到 std::bitset

我需要从字节数组(std::vector)中提取内容到位集。内容可能跨越两个字节。这是我的单元测试:std::vectorval={0xAB,0xCD,0xEF};//is101010111100110111101111std::bitseta=extractToBitSet(val,0);//shouldbe0x0A:1010std::bitsetbc=extractToBitSet(val,4);//shouldbe0xBC:10111100std::bitsetdef=extractToBitSet(val,12);//shouldbe0x0DEF:110111101111CPP

c++ - 使用 new 运算符定义 std::shared_ptr 时出错

我正在尝试通过以下方式使用new运算符定义std::shared_ptr:#includestructA{};intmain(){std::shared_ptrptr=newA();return0;}但我得到了以下编译时错误:main.cpp:Infunction'intmain()':main.cpp:8:30:error:conversionfrom'A*'tonon-scalartype'std::shared_ptr'requestedstd::shared_ptrptr=newA();无论如何,以下绝对有效:std::shared_ptrptr{newA()};有谁知道为什么

C++11 - 无法使用 constexpr 函数定义 constexpr 文字?

我遇到了一个看似违反直觉的错误,即无法将constexpr函数的值分配给constexpr文字(希望我正在使用语言正确)。这是示例:classMyClass{public:staticconstexprintFooValue(intn){returnn+5;}staticconstexprintFoo5=FooValue(5);//compilererrorstaticconstexprintFoo5Alt(void){returnFooValue(5);}//OK};在GCC4.8.4中,Foo5被标记为fieldinitializerisnotconstant。找到thisthre

c++ - 在 std::string 上执行正则表达式搜索和替换

我有一个模式'"XYZ\d\d'和一个'largish'字符串,这个模式可以出现很多次。我的目标是在字符串中找到该模式的所有实例,然后用原始字符串中的字母“A”替换该匹配项中的所有字符。到目前为止,我得到了以下结果,但是有一个错误:#include#includeintmain(){std::regexexp("XYZ\\d\\d");std::smatchres;std::stringstr="XYZ111d-dxxxxxxxXYZ222t-nyyyyyyyyyXYZ333t-r";autoitr=str.cbegin();while(std::regex_search(itr,st

c++ - gcc 和 clang 中 constexpr 静态成员变量的链接器错误

我有一个片段:enumclassEC{a,b};structB{constexprB(ECec):ec_(ec){}ECec_;};structA_base{constexprA_base(Bb):b_(b){}Bb_;};structA:A_base{staticconstexprBbbb=EC::a;constexprA(Bbbbb):A_base(bbbb){}};intmain(){Aa1(A::bbb);//1Aa2{A::bbb};//2Aa3=A::bbb;//3Aa4={A::bbb};//4}它在支持c++17的现代编译器中编译良好。使用c++11和c++14标准支持

C++:具有 `std::lock_guard` 的互斥量是否足以同步两个 `std::thread`?

我的问题是基于下面的C++代码示例#include#include#include#includeclassClassUtility{public:ClassUtility(){}~ClassUtility(){}voiddo_something(){std::coutlock(g_mutex);std::coutlock(g_mutex);std::cout如果需要,这更像是一个问题,目的是让我的理解更清楚,并获取std::condition_variable的示例用法。我有2个C++std::thread,它们在main方法中启动。它是osx上的控制台应用程序。所以使用clang编

c++ - 使用 std::enable_if 保护复制构造函数

我编写了一个类来促进具有以下构造函数的类型删除:classEnvelope{public:Envelope(){}templateEnvelope(Runnablerunnable):m_runFunc(&Envelope::RunAndDeleteRunnable),m_runnable(newRunnable(runnable)){}templateEnvelope(Runnable*runnable):m_runFunc(&Envelope::RunRunnable),m_runnable(runnable){}};我想重写第一个非默认构造函数以获取引用而不是值(Runnable

C++17类模板推导const-ness

我正在尝试使用新的c++17类模板推导,在我应用const之前它似乎一切正常。这是我面临的麻烦的一个小例子:#includetemplatestructX{T_data;X(void)=default;X(T&&data):_data{data}{}constexprboolconst_x(void){returnfalse;}constexprboolconst_x(void)const{returntrue;}};templateX(T&&)->X>;intmain(void){Xa;constXb{};Xc{10};constXd{10};static_assert(!a.con

c++ - cv::String 和 std::string:何时使用哪一个以及同时使用两者的必要性?

在OpenCV项目中,通常cv::String用于函数,例如一个简单的putText。但是,当使用std的函数时,std::string是负责的。例如。在这种情况下ifstreamstream(filepath);stringline;getline(stream,line,'\n');std::string是必需的,因为cv::String会抛出错误。在反之亦然的情况下,使用OpenCV函数std::string被正确转换为cv::String并且以下代码有效:stringStr="Test";putText(img,Str,Point(10,10),FONT_HERSHEY_PLA

c++ - c++14 std::experimental::filesystem::v1 和 c++17 std::filesystem 之间的区别?

我找到了这个页面,描述了c++14和c++17之间的变化:https://isocpp.org/files/papers/p0636r0.html...它链接到此页面,该页面描述了建议的文件系统更改:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0218r0.html我浏览了一下。标准的措辞有细微的变化,但我看到的唯一代码变化是namespace变化,删除了“实验”和“v1”部分,因此“std::experimental::filesystem::v1”变成了“std::filesystem”",这是预期的。据我所知,